package com.baseLesson._02_dataStruct._02Stacks_and_Queues._03_A_Stack_Problem_in_Leetcode;

import java.util.Stack;
//  num 20
class Solution {
    public boolean  isValid(String s) {

        Stack<Character> stack = new Stack();
        // s ="{[()]}"
        for(int i = 0 ; i < s.length() ; i ++){
            char c = s.charAt(i);

            if(c == '(' || c == '[' || c == '{'){
                stack.push(c);
            } else{
                if(stack.isEmpty())
                    return false;

                char topChar = stack.pop();
                if(c == ')' && topChar != '(')
                    return false;
                if(c == ']' && topChar != '[')
                    return false;
                if(c == '}' && topChar != '{')
                    return false;
            }
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {

        System.out.println((new Solution()).isValid("()[]{}"));
        //System.out.println((new Solution()).isValid("{[()]}"));
        //System.out.println((new Solution()).isValid("([)]"));
    }
}
